package com.captjack.bigdata.hadoop.hdfs;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * @author Capt Jack
 * @date 2018/2/7
 */
public interface HadoopDistributedFileSystemDao {

    /**
     * 创建目录
     *
     * @param directoryPath 目录路径
     * @return 返回true代表创建成功，反之则创建失败
     * @throws IOException 异常
     */
    boolean createDirectory(String directoryPath) throws IOException;

    /**
     * 创建新文件
     *
     * @param filePath 目录路径
     * @return 返回true代表创建成功，反之则创建失败
     * @throws IOException 异常
     */
    boolean createFile(String filePath) throws IOException;

    /**
     * 向文件中写入内容，如果文件不存在，那么创建新文件写入
     *
     * @param filePath    文件路径
     * @param content     写入内容，字节数组
     * @param isOverWrite 是否覆盖，true为覆盖，反之则是追加
     * @return 返回true，代表写入成功，反之则是失败
     * @throws IOException 异常
     */
    boolean write(String filePath, byte[] content, boolean isOverWrite) throws IOException;

    /**
     * 向文件中写入内容，如果文件不存在，那么创建新文件写入
     *
     * @param filePath    文件路径
     * @param file        写入文件
     * @param isOverWrite 是否覆盖，true为覆盖，反之则是追加
     * @return 返回true，代表写入成功，反之则是失败
     * @throws IOException 异常
     */
    boolean write(String filePath, File file, boolean isOverWrite) throws IOException;

    /**
     * 读取hdfs文件
     *
     * @param filePath 文件路径
     * @return 字节数组
     * @throws IOException 异常
     */
    byte[] read(String filePath) throws IOException;

    /**
     * 删除文件或者目录
     *
     * @param filePath 文件路径
     * @return true代表成功，反之代表失败
     * @throws IOException 异常
     */
    boolean deleteHDFSFile(String filePath) throws IOException;

    /**
     * 列出文件夹下所有文件，不递归
     *
     * @param path 路径
     * @return 文件名集合
     * @throws IOException 异常
     */
    List<String> listAll(String path) throws IOException;

}
